home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 8 / The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO / g_quake / server1.zip / _RANK.QC < prev    next >
Text File  |  1996-09-04  |  6KB  |  186 lines

  1. /*
  2. **
  3. ** _rank.qc (Rank Code, 1.2)
  4. **
  5. ** Copyright (C) 1996 Johannes Plass
  6. ** 
  7. ** This program is free software; you can redistribute it and/or modify
  8. ** it under the terms of the GNU General Public License as published by
  9. ** the Free Software Foundation; either version 2 of the License, or
  10. ** (at your option) any later version.
  11. ** 
  12. ** This program is distributed in the hope that it will be useful,
  13. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. ** GNU General Public License for more details.
  16. **
  17. ** You should have received a copy of the GNU General Public License
  18. ** along with this program; if not, write to the Free Software
  19. ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20. ** 
  21. ** Author:   Johannes Plass (plass@dipmza.physik.uni-mainz.de)
  22. **
  23. */
  24.  
  25.  
  26. void(entity player,entity sort) RankPrintRank;
  27.  
  28. void(entity player) RankInfo =
  29. {
  30.    if (!USE_MODULE_RANK) return;
  31.  
  32.    sprint(player,"# Rank: Type 'rank' for extended\n");
  33.    sprint(player,"  ranking, 'help-rank' for help.\n");
  34. };
  35.  
  36. void(entity player) RankInit =
  37. {
  38.    if (!USE_MODULE_RANK) return;
  39.  
  40.    stuffcmd(player,"alias rank \"impulse 203\";\n");
  41.    stuffcmd(player,"alias help-rank \"impulse 204\";\n");
  42. };
  43.  
  44. void(entity player) RankHelp =
  45. {
  46.    if (!USE_MODULE_RANK) return;
  47.  
  48. //                123456789#123456789#123456789#12345678
  49.    sprint(player,"# Rank: provides extended rankings.\n");
  50.    sprint(player,"  Type 'rank' to display a list of\n");
  51.    sprint(player,"  current ranks in the format\n");
  52.    sprint(player,"    TOT = KILL DEATH ACCID = PLAYER\n");
  53.    sprint(player,"  where\n");
  54.    sprint(player,"    PLAYER : name of player\n");
  55.    sprint(player,"    TOT    : his total score\n");
  56.    sprint(player,"    KILL   : how many he killed\n");
  57.    sprint(player,"    DEATH  : how many killed him\n");
  58.    sprint(player,"    ACCID  : his deathly accidents\n");
  59.    sprint(player,"  Formula for TOT:\n");
  60.    sprint(player,"    TOT = 3*KILL - DEATH - 3*ACCID\n");
  61. };
  62.  
  63. void(entity player,float event) RankCountEvent =
  64. {
  65.    if (!USE_MODULE_RANK) return;
  66.  
  67.    if      (event == RANK_KILL)     player.rank_kills     = player.rank_kills     + 1;
  68.    else if (event == RANK_DEATH)    player.rank_deaths    = player.rank_deaths    + 1;
  69.    else if (event == RANK_ACCIDENT) player.rank_accidents = player.rank_accidents + 1;
  70.    else if (event == RANK_SUICIDE)  player.rank_suicides  = player.rank_suicides  + 1;
  71.    player.rank_total =   3 * player.rank_kills 
  72.             -     player.rank_deaths
  73.                 - 3 * player.rank_accidents
  74.                 - 6 * player.rank_suicides
  75.             ;
  76.  
  77. };
  78.  
  79. void(entity targ, entity attacker) RankClientObituary =
  80. {
  81.    //dprint ("RankClientObituary: executing\n");
  82.  
  83.    if (!USE_MODULE_RANK) return;
  84.  
  85.    if (targ.classname == "player") {
  86.       if (attacker.classname == "teledeath") {
  87.          // telefragging
  88.          RankCountEvent(attacker,RANK_KILL);
  89.          RankCountEvent(targ,RANK_DEATH);
  90.       } else if (attacker.classname == "teledeath2") {
  91.          // never seen in game, so may be wrong here
  92.          RankCountEvent(targ,RANK_ACCIDENT);
  93.       } else if (attacker.classname == "player") {
  94.          if (targ == attacker) {
  95.             // player killed by own weapon
  96.             RankCountEvent(targ,RANK_ACCIDENT);
  97.          }  else {
  98.             // attacker killed target
  99.             RankCountEvent(attacker,RANK_KILL);
  100.             RankCountEvent(targ,RANK_DEATH);
  101.          }
  102.       } else {
  103.          // player killed by environment (slime, water, lava etc.)
  104.          RankCountEvent(targ,RANK_ACCIDENT);
  105.       }
  106.    }
  107. };
  108.  
  109. void(entity player,float n,float digits) RankPrintRankNumber =
  110. {
  111.    local string ns;
  112.    if (n<0) {
  113.       if (digits > 3 && n >= -99) sprint (player," ");
  114.       if (digits > 2 && n >=  -9) sprint (player," ");
  115.    } else if (n >= 0) {
  116.       if (digits > 3 && n <= 999) sprint (player," ");
  117.       if (digits > 2 && n <=  99) sprint (player," ");
  118.       if (digits > 1 && n <=   9) sprint (player," ");
  119.    }
  120.    ns = ftos(n);
  121.    sprint (player,ns);
  122. };
  123.  
  124. void(entity player,entity sort) RankPrintRank =
  125. {
  126.    local float acc;
  127.    if (PlayerStatusPlayerIsBogusPlayer(sort)) return;
  128.    else if (sort.deadflag != DEAD_NO) sprint(player,"d");
  129.    else if (sort.player_status & PLAYER_IS_OBSERVER) sprint(player,"o");//#jp#(Observer)
  130.    else sprint(player," ");
  131.    RankPrintRankNumber(player,sort.rank_total,4);
  132.    sprint (player," = ");
  133.    RankPrintRankNumber(player,sort.rank_kills,3);
  134.    sprint (player," ");
  135.    RankPrintRankNumber(player,sort.rank_deaths,3);
  136.    sprint (player," ");
  137.    acc = sort.rank_accidents + sort.rank_suicides;
  138.    RankPrintRankNumber(player,acc,3);
  139.    sprint (player," = ");
  140.    sprint (player,sort.netname);
  141.    sprint (player,"\n");
  142. };
  143.  
  144. void(entity player) RankDumpRanksToConsole =
  145. {
  146.    local entity    e, sort, walk;
  147.  
  148.    if (!USE_MODULE_RANK) return;
  149.  
  150.    if (world.chain) error ("RankDumpRanksToConsole: world.chain is set");
  151.  
  152. // build a sorted lis
  153.    e = find(world, classname, "player");
  154.    sort = world;
  155.    while (e) {
  156.       if (!sort) {
  157.          sort = e;
  158.          e.chain = world;
  159.       }  else {
  160.          if (e.rank_total < sort.rank_total) {
  161.             e.chain = sort;
  162.             sort = e;
  163.          } else {
  164.             walk = sort;
  165.             do {
  166.                if (!walk.chain) {
  167.                   e.chain = world;
  168.                   walk.chain = e;
  169.                } else if (walk.chain.rank_total > e.rank_total) {
  170.                   e.chain = walk.chain;
  171.                   walk.chain = e;
  172.                } else
  173.                   walk = walk.chain;
  174.             } while (walk.chain != e);
  175.          }
  176.       }
  177.       e = find(e, classname, "player");
  178.    }
  179.  
  180.    while (sort) {
  181.       RankPrintRank (player,sort);
  182.       sort = sort.chain;
  183.    }
  184. };
  185.  
  186.